﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;

namespace GestorDeFlotasDesktop.AbmCliente
{
    public partial class AbmCliente : Form
    {
        private int selected_elem = -1;
        public AbmCliente(Modelo.FormActions.Actions action, string id)
        {
            InitializeComponent();
            pk.Visible = false;
            lbl_estado.Text = "ALTA";
            tb_grande.Visible = false;

            if (action == Modelo.FormActions.Actions.Modificacion || action == Modelo.FormActions.Actions.Baja)
            {
                selected_elem = Convert.ToInt32(id);
                lbl_estado.Text = "MODIFICACION";

                using (SqlConnection con = Modelo.Modelo.createConnection())
                {
                    SqlDataAdapter da = new SqlDataAdapter("SELECT * FROM NUNCA_TAXI.Clientes WHERE (Id_Cliente != 1 )  AND (Id_Cliente = " + id + ")", con);

                    DataTable dt = new DataTable();

                    da.Fill(dt);

                    pk.Name = id;

                    tb_nombre.Text = dt.Rows[0]["Cl_Nombre"].ToString();
                    tb_apellido.Text = dt.Rows[0]["Cl_Apellido"].ToString();
                    tb_dni.Text = dt.Rows[0]["Cl_Dni"].ToString();
                    tb_grande.Text = dt.Rows[0]["Cl_Direccion"].ToString();
                    tb_tel.Text = dt.Rows[0]["Cl_Telefono"].ToString();
                    tb_mail.Text = dt.Rows[0]["Cl_Mail"].ToString();
                    dt_nacimiento.Value = DateTime.Parse(dt.Rows[0]["Cl_Fecha_Nac"].ToString());

                    label7.Visible = label8.Visible = label9.Visible = label11.Visible = false;
                    tb_dpto.Visible = tb_localidad.Visible = tb_nropiso.Visible = tb_cp.Visible = false;
                    tb_grande.Visible = true;

                    if (Convert.ToBoolean(dt.Rows[0]["Cl_Habilitado"].ToString()) == false)
                    {
                        cb_habi.Checked = false;
                    }
                    else
                    {
                        cb_habi.Checked = true;
                    }

                    if (action == Modelo.FormActions.Actions.Baja)
                    {
                        lbl_estado.Text = "BAJA";
                        Propiedades.Enabled = false;
                    }

                    try
                    {
                        Modelo.Modelo.openConnection(con);
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.Message);
                    }
                    finally
                    {
                        Modelo.Modelo.closeConnection(con);
                    }
                }
            }
        }

        private void AbmCliente_Load(object sender, EventArgs e)
        {

        }

        private void aceptar_Click_1(object sender, EventArgs e)
        {
            using (SqlConnection con = Modelo.Modelo.createConnection())
            {
                if (lbl_estado.Text == "ALTA")
                {
                    bool valido = true;
                    string error_txt = "ERROR: ";
                    if (String.IsNullOrEmpty(tb_nombre.Text))
                    {
                        error_txt = String.Concat(error_txt, "\n Nombre de cliente es obligatorio");
                        valido = false;
                    }
                    if (String.IsNullOrEmpty(tb_apellido.Text))
                    {
                        error_txt = String.Concat(error_txt, "\n Apellido de cliente es obligatorio");
                        valido = false;
                    }
                    if (String.IsNullOrEmpty(tb_dni.Text))
                    {
                        error_txt = String.Concat(error_txt, "\n DNI de cliente es obligatorio");
                        valido = false;
                    }
                    if (String.IsNullOrEmpty(tb_tel.Text))
                    {
                        error_txt = String.Concat(error_txt, "\n Telefono de cliente es obligatorio");
                        valido = false;
                    }
                    if (String.IsNullOrEmpty(tb_dir.Text))
                    {
                        error_txt = String.Concat(error_txt, "\n Direccion de cliente es obligatorio");
                        valido = false;
                    }
                    if (String.IsNullOrEmpty(tb_cp.Text))
                    {
                        error_txt = String.Concat(error_txt, "\n Codigo Postal de cliente es obligatorio");
                        valido = false;
                    }
                    if (String.IsNullOrEmpty(dt_nacimiento.Text))
                    {
                        error_txt = String.Concat(error_txt, "\n Fecha de Nacimiento de cliente es obligatorio");
                        valido = false;
                    }
                    if (valido)
                    {
                        SqlCommand comando = new SqlCommand("INSERT INTO NUNCA_TAXI.Clientes(Cl_Nombre,Cl_Apellido,Cl_Dni,Cl_Direccion,Cl_Telefono,Cl_Mail,Cl_Fecha_Nac,Cl_Habilitado) VALUES(@nom,@ape,@dni,@dire,@tel,@mail,@fech,@habi)", con);
                        comando.Parameters.AddWithValue("nom", tb_nombre.Text);
                        comando.Parameters.AddWithValue("ape", tb_apellido.Text);
                        comando.Parameters.AddWithValue("dni", tb_dni.Text);
                        comando.Parameters.AddWithValue("dire", tb_dir.Text + " - " + tb_nropiso.Text + " " + tb_dpto.Text + " - " + "(" + tb_localidad.Text + ") (" + tb_cp.Text + ")");
                        comando.Parameters.AddWithValue("tel", tb_tel.Text);
                        comando.Parameters.AddWithValue("mail", tb_mail.Text);
                        comando.Parameters.AddWithValue("fech", dt_nacimiento.Value);

                        using (SqlConnection con_un = Modelo.Modelo.createConnection())
                        {
                            try
                            {
                                Modelo.Modelo.openConnection(con_un);
                                SqlCommand comando_check_unique = new SqlCommand(Modelo.SqlQueries.getClienteByTel(tb_tel.Text), con_un);
                                SqlDataReader reader = comando_check_unique.ExecuteReader();
                                if (reader.Read())
                                {
                                    MessageBox.Show("Cliente duplicado. Ya existe otro con igual telefono");
                                }
                                else
                                {
                                    if (cb_habi.Checked == true)
                                    {
                                        comando.Parameters.AddWithValue("habi", 1);
                                    }
                                    else if (cb_habi.Checked == false)
                                    {
                                        comando.Parameters.AddWithValue("habi", 0);
                                    }

                                    try
                                    {
                                        Modelo.Modelo.openConnection(con);
                                        comando.ExecuteNonQuery();
                                    }
                                    catch (Exception ex)
                                    {
                                        MessageBox.Show(ex.Message);
                                    }
                                    finally
                                    {
                                        tb_nombre.Text = "";
                                        tb_apellido.Text = "";
                                        tb_dni.Text = "";
                                        tb_dir.Text = "";
                                        tb_tel.Text = "";
                                        tb_mail.Text = "";
                                        tb_dpto.Text = "";
                                        tb_nropiso.Text = "";
                                        tb_localidad.Text = "";
                                        tb_cp.Text = "";
                                        cb_habi.Checked = false;
                                        dt_nacimiento.Value = System.DateTime.Now;
                                        Modelo.Modelo.closeConnection(con);
                                        MessageBox.Show("Cliente agregado exitosamente");
                                    }
                                }

                            }
                            catch (Exception ex)
                            {
                                MessageBox.Show(ex.Message);
                            }
                        }
                    }
                    else
                    {
                        MessageBox.Show(error_txt);
                    }
                }
                if (lbl_estado.Text == "MODIFICACION")
                {
                    bool valido = true;
                    string error_txt = "ERROR: ";
                    if (String.IsNullOrEmpty(tb_nombre.Text))
                    {
                        error_txt = String.Concat(error_txt, "\n Nombre de cliente es obligatorio");
                        valido = false;
                    }
                    if (String.IsNullOrEmpty(tb_apellido.Text))
                    {
                        error_txt = String.Concat(error_txt, "\n Apellido de cliente es obligatorio");
                        valido = false;
                    }
                    if (String.IsNullOrEmpty(tb_dni.Text))
                    {
                        error_txt = String.Concat(error_txt, "\n DNI de cliente es obligatorio");
                        valido = false;
                    }
                    if (String.IsNullOrEmpty(tb_tel.Text))
                    {
                        error_txt = String.Concat(error_txt, "\n Telefono de cliente es obligatorio");
                        valido = false;
                    }
                    if (String.IsNullOrEmpty(tb_grande.Text))
                    {
                        error_txt = String.Concat(error_txt, "\n Direccion de cliente es obligatorio");
                        valido = false;
                    }
                    if (String.IsNullOrEmpty(dt_nacimiento.Text))
                    {
                        error_txt = String.Concat(error_txt, "\n Fecha de Nacimiento de cliente es obligatorio");
                        valido = false;
                    }
                    if (valido)
                    {
                        SqlCommand comando = new SqlCommand("UPDATE NUNCA_TAXI.Clientes SET Cl_Nombre=@nom,Cl_Apellido=@ape,Cl_Dni=@dni,Cl_Direccion=@dire,Cl_Telefono=@tel,Cl_Mail=@mail,Cl_Fecha_Nac=@fech,Cl_Habilitado=@habi WHERE Id_Cliente = '" + pk.Name + "'", con);
                        comando.Parameters.AddWithValue("nom", tb_nombre.Text);
                        comando.Parameters.AddWithValue("ape", tb_apellido.Text);
                        comando.Parameters.AddWithValue("dni", Convert.ToDecimal(tb_dni.Text));
                        comando.Parameters.AddWithValue("dire", tb_grande.Text);
                        comando.Parameters.AddWithValue("tel", Convert.ToDecimal(tb_tel.Text));
                        comando.Parameters.AddWithValue("mail", tb_mail.Text);
                        comando.Parameters.AddWithValue("fech", dt_nacimiento.Value);

                        using (SqlConnection con_un = Modelo.Modelo.createConnection())
                        {
                            try
                            {
                                Modelo.Modelo.openConnection(con_un);
                                SqlCommand comando_check_unique = new SqlCommand(Modelo.SqlQueries.getClienteByTel(tb_tel.Text), con_un);
                                SqlDataReader reader = comando_check_unique.ExecuteReader();
                                bool found = false;
                                while (reader.Read())
                                {
                                    if (!reader[0].ToString().Equals(selected_elem.ToString()))
                                    {
                                        found = true;
                                        break;
                                    }
                                }
                                if (found)
                                {
                                    MessageBox.Show("Cliente duplicado. Ya existe otro con igual telefono");
                                }
                                else
                                {
                                    if (cb_habi.Checked == true)
                                    {
                                        comando.Parameters.AddWithValue("habi", 1);
                                    }
                                    else if (cb_habi.Checked == false)
                                    {
                                        comando.Parameters.AddWithValue("habi", 0);
                                    }

                                    try
                                    {
                                        Modelo.Modelo.openConnection(con);
                                        comando.ExecuteNonQuery();
                                    }
                                    catch (Exception ex)
                                    {
                                        MessageBox.Show(ex.Message);
                                    }
                                    finally
                                    {
                                        Modelo.Modelo.closeConnection(con);
                                    }
                                }
                            }
                            catch (Exception ex)
                            {
                                MessageBox.Show(ex.Message);
                            }
                        }
                                
                    }
                    else
                    {
                        MessageBox.Show(error_txt);
                    }
                }
                if (lbl_estado.Text == "BAJA")
                {
                    SqlCommand comando = new SqlCommand("UPDATE NUNCA_TAXI.Clientes SET Cl_Habilitado=@habi WHERE Id_Cliente = '" + pk.Name + "'", con);
                    comando.Parameters.AddWithValue("habi", 0);
                    try
                    {
                        Modelo.Modelo.openConnection(con);
                        comando.ExecuteNonQuery();
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.Message);
                    }
                    finally
                    {
                        Modelo.Modelo.closeConnection(con);
                    }
                }
            }
        }
    }
}
